package com.ruoyi.lead.service.impl;

import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.util.EasyPoiUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.lead.mapper.TbLeadMapper;
import com.ruoyi.lead.domain.TbLead;
import com.ruoyi.lead.service.ITbLeadService;
import org.springframework.web.multipart.MultipartFile;

import static com.baomidou.mybatisplus.extension.toolkit.Db.update;

/**
 * 线索Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-10-19
 */
@Service
public class TbLeadServiceImpl implements ITbLeadService
{
    @Autowired
    private TbLeadMapper tbLeadMapper;
    @Autowired
    EasyPoiUtil easyPoiUtil;

    /**
     * 查询线索
     * 
     * @param leadId 线索主键
     * @return 线索
     */
    @Override
    public TbLead selectTbLeadByLeadId(Long leadId)
    {
        return tbLeadMapper.selectTbLeadByLeadId(leadId);
    }

    /**
     * 查询线索列表
     * 
     * @param tbLead 线索
     * @return 线索
     */
    @Override
    public List<TbLead> selectTbLeadList(TbLead tbLead)
    {
        return tbLeadMapper.selectTbLeadList(tbLead);
    }

    /**
     * 新增线索
     * 
     * @param tbLead 线索
     * @return 结果
     */
    @Override
    public int insertTbLead(TbLead tbLead)
    {
        tbLead.setCreateTime(DateUtils.getNowDate());
        return tbLeadMapper.insertTbLead(tbLead);
    }

    /**
     * 修改线索
     * 
     * @param tbLead 线索
     * @return 结果
     */
    @Override
    public int updateTbLead(TbLead tbLead)
    {
        return tbLeadMapper.updateTbLead(tbLead);
    }

    /**
     * 批量删除线索
     * 
     * @param leadIds 需要删除的线索主键
     * @return 结果
     */
    @Override
    public int deleteTbLeadByLeadIds(Long[] leadIds)
    {
        return tbLeadMapper.deleteTbLeadByLeadIds(leadIds);
    }

    /**
     * 删除线索信息
     * 
     * @param leadId 线索主键
     * @return 结果
     */
    @Override
    public int deleteTbLeadByLeadId(Long leadId)
    {
        return tbLeadMapper.deleteTbLeadByLeadId(leadId);
    }

    /**
     * 导入
     * @param file
     */
    @Override
    public void leadImport(MultipartFile file) {
        List<TbLead> list = easyPoiUtil.importFileExcel(file, TbLead.class);
        if(CollectionUtil.isNotEmpty(list)){
            List<TbLead> leadList = BeanUtil.copyToList(list, TbLead.class);
            tbLeadMapper.leadImport(leadList);
        }

    }

    /**
     * 分配
     * @param leadIds
     * @return
     */
    @Override
    public boolean allocateLead(List<Long> leadIds) {
        // 模拟“保有量超限”逻辑：假设当前人员已分配 2 条，再分配 2 条则超限（总数 > 3）
        int existingCount = 2; // 实际应从数据库查询该人员已分配的线索数
        if (existingCount + leadIds.size() > 3) {
            throw new RuntimeException("保有量达到上限，最多选择3条线索");
        }
        // 执行分配（更新线索的 owner、leadStatus 等字段）
        LambdaUpdateWrapper<TbLead> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.in(TbLead::getLeadId, leadIds)
                .set(TbLead::getLeadStatus, "跟进中");
        return update(lambdaUpdateWrapper);
    }
}
